package com.wande.dataplatform.service;

import com.wande.common.mybatis.core.page.PageQuery;
import com.wande.common.mybatis.core.page.TableDataInfo;
import com.wande.dataplatform.domain.bo.DataSourceBo;
import com.wande.dataplatform.domain.vo.DataSourceVo;

import java.sql.Connection;
import java.util.Collection;
import java.util.List;

/**
 * 数据源Service接口
 *
 * @author ruoyi
 */
public interface IDataSourceService {

    /**
     * 查询数据源
     *
     * @param id 数据源主键
     * @return 数据源
     */
    DataSourceVo queryById(Long id);

    /**
     * 查询数据源列表
     *
     * @param bo 数据源
     * @return 数据源集合
     */
    TableDataInfo<DataSourceVo> queryPageList(DataSourceBo bo, PageQuery pageQuery);

    /**
     * 查询数据源列表
     *
     * @param bo 数据源
     * @return 数据源集合
     */
    List<DataSourceVo> queryList(DataSourceBo bo);

    /**
     * 新增数据源
     *
     * @param bo 数据源
     * @return 结果
     */
    Boolean insertByBo(DataSourceBo bo);

    /**
     * 修改数据源
     *
     * @param bo 数据源
     * @return 结果
     */
    Boolean updateByBo(DataSourceBo bo);

    /**
     * 校验并批量删除数据源信息
     *
     * @param ids 需要删除的数据源主键集合
     * @return 结果
     */
    Boolean deleteWithValidByIds(Collection<Long> ids);

    /**
     * 测试数据源连接
     *
     * @param id 数据源主键
     * @return 测试结果
     */
    Boolean testConnection(Long id);

    /**
     * 测试数据源连接（使用BO对象）
     *
     * @param bo 数据源业务对象
     * @return 测试结果
     */
    Boolean testConnectionByBo(DataSourceBo bo);

    /**
     * 获取数据源连接
     *
     * @param id 数据源主键
     * @return 数据库连接
     */
    Connection getConnection(Long id);

    /**
     * 校验数据源名称是否唯一
     *
     * @param bo 数据源业务对象
     * @return 结果
     */
    Boolean checkNameUnique(DataSourceBo bo);

}
